home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / C and C++ / Commun⁄Network / macworkstation msg ƒ / EXEC.a next >
Encoding:
Text File  |  1988-08-16  |  2.5 KB  |  113 lines  |  [TEXT/KAHL]

  1. ; ===================================================================== ;
  2. ;
  3. ;    System :    MacWorkStation
  4. ;
  5. ;    Module :    EXEC.a
  6. ;
  7. ;    This is the header code for EXEC modules.
  8. ;
  9. ; ===================================================================== ;
  10.  
  11.             PRINT    OFF
  12.                 INCLUDE         'Traps.a'
  13.                 INCLUDE         'ToolEqu.a'
  14.                 INCLUDE         'QuickEqu.a'
  15.                 INCLUDE         'SysEqu.a'
  16.             PRINT    ON
  17.  
  18. * The following data module is used to define the QuickDraw global data area.
  19. *                -----------
  20.  
  21. QuickDraw        RECORD            IMPORT,DECREMENT
  22. thePort         DS.L            1
  23. white            DS.B            8
  24. black            DS.B            8
  25. gray            DS.B            8
  26. ltGray            DS.B            8
  27. dkGray            DS.B            8
  28. arrow            DS.B            cursRec
  29. screenBits        DS.B            14
  30. randSeed        DS.L            1
  31.                 ENDR
  32.  
  33. EXEChdr        MAIN                    ; start of EXEC code
  34.             IMPORT    EXEC            ; pascal routine
  35.             CASE    ON
  36.             IMPORT    A5Alloc
  37.             IMPORT    A5Init
  38.             IMPORT    A5Dispose
  39.             CASE    OFF
  40.  
  41.             bra.s    begEXEC            ; branch around header
  42.             dc.w    0                ; flags word
  43.             dc.b    'MWSX'            ; type
  44.             dc.w    0                ; ID
  45.             dc.w    $0300            ; version
  46. myA5        dc.l    0                ; EXEC's A5
  47.  
  48. begEXEC        link    a6,#-4
  49.             move.l    a5,-4(a6)        ; save MWS A5
  50.             move.l    myA5,d0            ; have we already allocated globals
  51.             bne.s    @8                ; yes, go to TLPM
  52.             CASE    ON
  53.             jsr        A5Alloc            ; else allocate a global area
  54.             CASE    OFF
  55.             lea        myA5,a0
  56.             move.l    d0,(a0)            ; store it locally
  57.             move.l    d0,-(sp)
  58.             CASE    ON
  59.             jsr        A5Init            ; initialize globals
  60.             CASE    OFF
  61.             addq.l    #4,sp            ; clean up stack
  62. ;
  63. ; Move Quickdraw globals here also.
  64. ;
  65.             move.l    a1,-(sp)
  66.             move.l    (a5),a0            ; get MWS' quickdraw globals
  67.             lea        randseed(a0),a0
  68.             move.l    myA5,a5            ; get EXEC's quickdraw globals
  69.             lea        QuickDraw.randSeed,a1
  70.             move.l    #-randSeed,d0
  71.             _BlockMove                ; move MWS to EXEC
  72.             move.l    (sp)+,a1
  73. ;
  74. @8            move.l    myA5,a5            ; get new A5
  75.             move.w    12(a6),-(sp)    ; tlCode
  76.             move.l    8(a6),-(sp)        ; @params
  77.             jsr        EXEC            ; call exec module
  78.             move.l    -4(a6),a5        ; get old A5 back
  79.             cmpi.w    #5,12(a6)        ; test if tlCode was close
  80.             bne.s    @9
  81.             move.l    myA5,-(sp)        ; new A5
  82.             CASE    ON
  83.             jsr        A5Dispose
  84.             CASE    OFF
  85.             addq.l    #4,sp
  86.  
  87. @9            unlk    a6
  88.             move.l    (sp)+,a0
  89.             addq    #6,sp
  90.             jmp        (a0)            ; return to caller
  91.             ENDMAIN
  92. ;
  93. ; Interface back to MacWorkStation
  94. ; Must restore MWS' A5 before making the call
  95. ;
  96. CALLMWS        PROC    EXPORT
  97.             link    a6,#-4
  98.             move.l    a5,-4(a6)        ; save EXEC A5
  99.             move.l    CurrentA5,a5    ; restore MWS A5
  100.             move.l    12(a6),-(sp)    ; get mesage parameter
  101.             move.l    8(a6),a0        ; get address of routine
  102.             jsr        (a0)
  103.             move.l    -4(a6),a5        ; restore EXEC A5
  104. ;
  105.             unlk    a6
  106.             move.l    (sp)+,a0
  107.             addq    #8,sp
  108.             jmp        (a0)
  109.             ENDPROC
  110.  
  111.             END
  112.  
  113. ; end of EXEC.a